#ifndef LOG_HEADER
#define LOG_HEADER
#include<string>
#include<fstream>
#include<sstream>
#include<iostream>
#include<algorithm>
#include<iterator>
#include<vector>
#include<map>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include "def.hpp"
#include "utils.hpp"

/* This class is a Singleton */
namespace Puza{
  class PuzaLogger{
  public:
    static PuzaLogger* Instance();
    void Start();
    void End();
    string GetCurrentTime();
    void PutString(string);
  private:
    PuzaLogger();  // private so that it can  not be called
    PuzaLogger(PuzaLogger const&){}; // copy constructor is private
    static PuzaLogger* m_pInstance;
    string log_file_name;
    ofstream LogFile;
  };
};

#endif
